Chat   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 10
eloc 92
dl 0
loc 117
rs 10
c 0
b 0
f 0

9 Functions

Rating   Name   Duplication   Size   Complexity  
A handleChangeUsername 0 3 1
A handleChangeText 0 3 1
A handleMessageRecived 0 4 1
A handleJoinChat 0 11 1
A render 0 34 1
A handleSubmit 0 13 2
A componentDidMount 0 13 1
A getAllMessages 0 2 1
A handleOldMessagesRecived 0 3 1
1
import React from 'react';
2
import io from 'socket.io-client';
3
4
const socket = io('http://localhost:3000');
5
6
class Chat extends React.Component {
7
    
8
    constructor(props) {
9
        super(props);
10
        this.state = {
11
            text: "",
12
            username: "",
13
            messages: []    
14
        };
15
16
        this.handleJoinChat = this.handleJoinChat.bind(this);
17
        this.handleChangeUsername = this.handleChangeUsername.bind(this);
18
        this.handleChangeText = this.handleChangeText.bind(this);
19
        this.handleSubmit = this.handleSubmit.bind(this);
20
        this.handleMessageRecived = this.handleMessageRecived.bind(this);
21
        this.handleOldMessagesRecived = this.handleOldMessagesRecived.bind(this);
22
    }
23
    componentDidMount(){
24
        socket.on('connect', function() {
25
            console.info("Connected");
26
        });
27
28
        socket.on('chat message', this.handleMessageRecived);
29
30
        socket.on('join', this.handleUserJoined);
31
32
        socket.on("all messages", this.handleOldMessagesRecived);
33
34
        socket.on('disconnect', function() {
35
            this.setState({username: ""});
36
        });
37
    }
38
39
    handleOldMessagesRecived(messages){
40
        this.setState({messages:messages});
41
    }
42
    handleMessageRecived(message) {
43
        var messages = this.state.messages;
44
        messages.push(message);
45
        this.setState({messages:messages});
46
    }
47
48
    handleJoinChat(event) {
49
        event.preventDefault();
50
        var date = new Date();
51
52
        socket.emit('join',
53
        {
54
        username: "",
55
        text: this.state.username + " joined the chat",
56
        time: date.getHours() + " : " + date.getMinutes() + " : " + date.getSeconds(),
57
        id: socket.id
58
     });
59
60
    }
61
62
    getAllMessages(){
63
64
    }
65
66
    handleChangeUsername(event) {
67
        this.setState({username: event.target.value});
68
     }
69
70
    handleSubmit(event) {
71
        event.preventDefault();
72
        var date = new Date();
73
74
        if(this.state.username === ""){
75
            return;
76
        }
77
        socket.emit('chat message', 
78
        {
79
            username: this.state.username,
80
            text: this.state.text,
81
            time: date.getHours() + " : " + date.getMinutes() + " : " + date.getSeconds()
82
        });
83
    }
84
85
    handleChangeText(event) {
86
        this.setState({text: event.target.value});
87
    }
88
89
90
91
    render() {
92
        return  <div className="chat-container">
93
94
                    
95
96
97
                    <h4>Chat</h4>
98
                    <form onSubmit={this.handleJoinChat} className="message-form">
99
                        <label>Username</label>
100
                        <input type="text" className="message-form-username" onChange={this.handleChangeUsername}/>
101
                        <input type="submit" value="Join chat" className="join-chat-btn"/>
102
                    </form>
103
                    <div className="all-messages">
104
                    {this.state.messages.map((msg, index) => (
105
                       
106
                        <div key={index} className="message">
107
                            <p className="all-messages-username"> {msg.username} | {msg.time} </p>
108
                            <p className="all-messages-text">  {msg.text}</p>
109
                        </div>
110
111
                    ))}
112
113
                    </div>
114
115
                    <form onSubmit={this.handleSubmit} className="message-form">
116
                        <label>Message</label>
117
                        <input type="text" className="message-form-text" onChange={this.handleChangeText}/>
118
                        <input type="submit" value="Skicka" />
119
                    </form>
120
                    
121
                </div>
122
    }
123
}
124
125
126
127
128
129
130
export default Chat;